package org.lanqiao.tjut.Controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.lanqiao.tjut.Bean.StudentBean;
import org.lanqiao.tjut.Bean.TeacherBean;
import org.lanqiao.tjut.Bean.UsersBean;
import org.lanqiao.tjut.MyUtils.MyUtils;
import org.lanqiao.tjut.Service.ServiceFactory;

/**
 * 用户登录
 * 
 * @author cris
 *
 */
public class LoginServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 对客户端请求进行处理 （可以替代 doget和dopost）
		// 调用Model层进行客户端请求的响应处理
		MyUtils.logger_console.debug("已经接收到客户端发送过来的请求service。。。。");
		// 接收客户端数据请求时进行编码设置，防止中文乱码
		// req.setCharacterEncoding("UTF-8");

		// 使用request的getParameter方法获取前台页面的表单数据
		String strLoginInfo = req.getParameter("txtUserInfo");
		MyUtils.logger_console.debug("登录用户身份：" + strLoginInfo);
		// 管理员登录验证
		if (strLoginInfo.equals("管理员")) {
			// 用户名
			String strUserName = req.getParameter("txtUserName");
			MyUtils.logger_console.debug("登录用户名：" + strUserName);
			// 密码
			String strUserPsw = req.getParameter("txtUserPsw");
			// 将表单数据填充到实体对象属性中
			UsersBean usersB = (UsersBean) MyUtils.getNewInstance(UsersBean.class);
			usersB.setUsername(strUserName);
			usersB.setUserpsw(strUserPsw);
			// 登录验证
			// boolean isL =
			// ServiceFactory.getLoginServiceInstance().isLogined(usersB);
			List<UsersBean> lstUsers = ServiceFactory.getLoginServiceInstance().isLogined2(usersB);
			// 登录失败跳转页面
			String strResultPage = "login.jsp";
			// 根据登录验证结果进行页面跳转
			if (lstUsers != null && lstUsers.size() > 0) {
				// 登录成功
				// 输入日志
				MyUtils.logger_rootLogger.info(usersB.getUsername() + "登录成功！");

				strResultPage = "logined/logined.jsp";
				// 使用session将控制层的数据 传递到前台页面 使用el表达式进行解析
				req.getSession().setAttribute("loginedUsersB", usersB);
			}
			// 使用session将控制层的数据 传递到前台页面 使用el表达式进行解析
			// req.getSession().setAttribute("loginedUsersB", usersB);
			// 使用forward进行页面跳转
			req.getRequestDispatcher(strResultPage).forward(req, resp);
		}
		// 教师验证登录
		if (strLoginInfo.equals("教师")) {
			// 用户名
			String strUserName = req.getParameter("txtUserName");
			MyUtils.logger_console.debug("登录用户名：" + strUserName);
			// 密码
			String strUserPsw = req.getParameter("txtUserPsw");
			// 将表单数据填充到实体对象属性中
			TeacherBean teaB = (TeacherBean) MyUtils.getNewInstance(TeacherBean.class);
			teaB.setTeaname(strUserName);
			teaB.setTeapsw(strUserPsw);
			List<TeacherBean> lstTea = ServiceFactory.getLoginServiceInstance().isLogined3(teaB);
			// 登录失败跳转页面
			String strResultPage = "login.jsp";
			// 根据登录验证结果进行页面跳转
			if (lstTea != null && lstTea.size() > 0) {
				// 登录成功
				// 输入日志
				MyUtils.logger_rootLogger.info(teaB.getTeaname() + "登录成功！");

				strResultPage = "logined/logined_tea.jsp";
				// 使用session将控制层的数据 传递到前台页面 使用el表达式进行解析
				req.getSession().setAttribute("loginedTeaB", teaB);
			}
			// 使用forward进行页面跳转
			req.getRequestDispatcher(strResultPage).forward(req, resp);
		}
		// 学生验证登录
		if (strLoginInfo.equals("学生")) {
			// 用户名
			String strUserName = req.getParameter("txtUserName");
			MyUtils.logger_console.debug("登录用户名：" + strUserName);
			// 密码
			String strUserPsw = req.getParameter("txtUserPsw");
			// 将表单数据填充到实体对象属性中
			StudentBean stuB = (StudentBean) MyUtils.getNewInstance(StudentBean.class);
			stuB.setStuname(strUserName);
			stuB.setStupsw(strUserPsw);
			List<StudentBean> lstStu = ServiceFactory.getLoginServiceInstance().isLogined4(stuB);
			// 登录失败跳转页面
			String strResultPage = "login.jsp";
			// 根据登录验证结果进行页面跳转
			if (lstStu != null && lstStu.size() > 0) {
				// 登录成功
				// 输入日志
				MyUtils.logger_rootLogger.info(stuB.getStuname() + "登录成功！");

				strResultPage = "logined/logined_stu.jsp";
				// 使用session将控制层的数据 传递到前台页面 使用el表达式进行解析
				req.getSession().setAttribute("loginedStuB", stuB);
			}
			// 使用forward进行页面跳转
			req.getRequestDispatcher(strResultPage).forward(req, resp);
		}
	}

	@Override
	public void destroy() {
		// Servlet销毁时的处理
		super.destroy();
	}

	@Override
	public void init() throws ServletException {
		// servlet初始化时的处理
		super.init();
	}

}
